﻿using System;
using System.IO;
using Microsoft.Win32;
using System.Windows;

namespace ColonExtractorApp
{
    public partial class MainWindow : Window
    {
        private string inputFile; // 输入文件路径
        private string outputFile; // 输出文件路径

        public MainWindow()
        {
            InitializeComponent();
        }

        // 选择输入文件按钮点击事件处理程序
        private void btnSelectInput_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            if (openFileDialog.ShowDialog() == true)
            {
                inputFile = openFileDialog.FileName;
                Log($"选择了输入文件: {inputFile}");
            }
        }

        // 选择输出文件按钮点击事件处理程序
        private void btnSelectOutput_Click(object sender, RoutedEventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            if (saveFileDialog.ShowDialog() == true)
            {
                outputFile = saveFileDialog.FileName;
                Log($"选择了输出文件: {outputFile}");
            }
        }

        // 提取按钮点击事件处理程序
        private void btnExtract_Click(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrEmpty(inputFile) || string.IsNullOrEmpty(outputFile))
            {
                MessageBox.Show("请选择输入文件和输出文件。");
                return;
            }

            try
            {
                bool hasProcessedLines = false; // 用于检查是否处理了任何行

                using (StreamReader reader = new StreamReader(inputFile, System.Text.Encoding.UTF8))
                using (StreamWriter writer = new StreamWriter(outputFile, false, System.Text.Encoding.UTF8))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        Log($"正在处理行: {line}");

                        // 去除行首尾的空白字符
                        line = line.Trim();

                        // 查找行中第一个冒号的位置
                        int colonIndex = line.IndexOf(':');
                        if (colonIndex != -1 && colonIndex + 1 < line.Length)
                        {
                            // 如果冒号后面有空格，则跳过空格
                            if (line[colonIndex + 1] == ' ')
                            {
                                colonIndex++; // 跳过冒号后的空格
                            }

                            // 查找引号的位置
                            int quoteStart = line.IndexOf('"', colonIndex);
                            int quoteEnd = line.IndexOf('"', quoteStart + 1);

                            if (quoteStart != -1 && quoteEnd != -1 && quoteEnd > quoteStart)
                            {
                                // 提取引号之间的内容（包括引号）
                                string extractedContent = line.Substring(quoteStart, quoteEnd - quoteStart + 1);
                                writer.WriteLine(extractedContent);
                                hasProcessedLines = true;
                                Log($"提取的内容: {extractedContent}");
                                continue;
                            }
                        }

                        // 如果没有找到符合模式的内容，则写入原始行
                        writer.WriteLine(line);
                        Log($"未匹配到格式，原样输出行: {line}");
                    }

                    if (!hasProcessedLines)
                    {
                        Log("没有处理任何行。输入文件可能不包含预期格式的行。");
                    }
                }

                // 立即验证输出文件以确保正确写入
                VerifyOutputFile();

                MessageBox.Show("提取完成成功。");
            }
            catch (Exception ex)
            {
                MessageBox.Show($"发生错误: {ex.Message}\n\n堆栈跟踪:\n{ex.StackTrace}");
            }
        }

        // 验证输出文件是否存在并读取其内容
        private void VerifyOutputFile()
        {
            if (File.Exists(outputFile))
            {
                using (StreamReader reader = new StreamReader(outputFile, System.Text.Encoding.UTF8))
                {
                    string result = reader.ReadToEnd();
                    Log($"输出内容:\n{result}");
                }
            }
            else
            {
                Log("输出文件不存在。");
            }
        }

        // 记录日志信息到文本框
        private void Log(string message)
        {
            txtLog.AppendText(message + Environment.NewLine);
            // 自动滚动到底部
            txtLog.ScrollToEnd();
        }
    }
}